package domain

import (
	"github.com/hlhutu/gormplus"
	"ruoyi-go/internal/framework/db"
	"time"
)

/**
 * 系统操作日志表 SysOperLog
 */
type SysOperLog struct {
	// 日志主键
	OperId int64 `json:"operId" gorm:"column:oper_id" form:"operId"`

	// 操作模块
	Title string `json:"title" gorm:"column:title" form:"title"`

	// 业务类型（0其它 1新增 2修改 3删除）
	BusinessType int `json:"businessType" gorm:"column:business_type" form:"businessType"`

	// 业务类型数组
	BusinessTypes []int `json:"businessTypes" gorm:"-" form:"businessTypes"` // 不映射到数据库列

	// 请求方法
	Method string `json:"method" gorm:"column:method" form:"method"`

	// 请求方式
	RequestMethod string `json:"requestMethod" gorm:"column:request_method" form:"requestMethod"`

	// 操作类别（0其它 1后台用户 2手机端用户）
	OperatorType int `json:"operatorType" gorm:"column:operator_type" form:"operatorType"`

	// 操作人员
	OperName string `json:"operName" gorm:"column:oper_name" form:"operName"`

	// 部门名称
	DeptName string `json:"deptName" gorm:"column:dept_name" form:"deptName"`

	// 请求url
	OperUrl string `json:"operUrl" gorm:"column:oper_url" form:"operUrl"`

	// 操作地址
	OperIp string `json:"operIp" gorm:"column:oper_ip" form:"operIp"`

	// 操作地点
	OperLocation string `json:"operLocation" gorm:"column:oper_location" form:"operLocation"`

	// 请求参数
	OperParam string `json:"operParam" gorm:"column:oper_param" form:"operParam"`

	// 返回参数
	JsonResult string `json:"jsonResult" gorm:"column:json_result" form:"jsonResult"`

	// 操作状态（0正常 1异常）
	Status int `json:"status" gorm:"column:status" form:"status"`

	// 错误消息
	ErrorMsg string `json:"errorMsg" gorm:"column:error_msg" form:"errorMsg"`

	// 操作时间
	OperTime time.Time `json:"operTime" gorm:"column:oper_time" form:"operTime"`

	// 消耗时间
	CostTime int64 `json:"costTime" gorm:"column:cost_time" form:"costTime"`
}

// TableName 映射数据库表名
func (m SysOperLog) TableName() string {
	return "sys_oper_log"
}

// SysOperLog Model 定义
type sysOperLogModel struct {
	gormplus.Model[SysOperLog] // 使用泛型封装基础操作
}

// SysOperLogModelInst 单例变量初始化
var sysOperLogModelInst *sysOperLogModel

// SysOperLogModel 获取 SysOperLog 单例模型
func SysOperLogModel() *sysOperLogModel {
	if sysOperLogModelInst == nil {
		// 将 SysOperLog 注册到 GORM DB，并初始化
		sysOperLogModelInst = &sysOperLogModel{Model: gormplus.NewModel(SysOperLog{}, db.GormDB)}
	}
	return sysOperLogModelInst
}
